From d870e1af271bcff23e4a2f47e70e5b41534df770 Mon Sep 17 00:00:00 2001 From: "kaf24@scramble.cl.cam.ac.uk" Date: Tue, 22 Jul 2003 14:48:24 +0000 Subject: [PATCH] bitkeeper revision 1.374 (3f1d4eb8Uq19CxRgaKAbW0xXMCqTxg) Many files: IRQ cleanups. Note that EVENT_NET_TX and EVENT_NET_RX have been merged into a single EVENT_NET. --- xen/drivers/block/xen_block.c | 2 +- xen/drivers/char/xen_kbd.c | 2 +- xen/include/hypervisor-ifs/hypervisor-if.h | 20 ++++----- xen/include/hypervisor-ifs/network.h | 4 +- xen/net/dev.c | 4 +- .../arch/xeno/drivers/block/xl_block.c | 4 +- .../arch/xeno/drivers/network/network.c | 41 ++++++------------- .../include/asm-xeno/irq.h | 6 +-- .../include/asm-xeno/keyboard.h | 12 ++---- 9 files changed, 34 insertions(+), 61 deletions(-) diff --git a/xen/drivers/block/xen_block.c b/xen/drivers/block/xen_block.c index dfacec0495..3ef15116df 100644 --- a/xen/drivers/block/xen_block.c +++ b/xen/drivers/block/xen_block.c @@ -828,7 +828,7 @@ static void make_response(struct task_struct *p, unsigned long id, spin_unlock_irqrestore(&p->blk_ring_lock, flags); /* Kick the relevant domain. */ - cpu_mask = mark_guest_event(p, _EVENT_BLK_RESP); + cpu_mask = mark_guest_event(p, _EVENT_BLKDEV); guest_event_notify(cpu_mask); } diff --git a/xen/drivers/char/xen_kbd.c b/xen/drivers/char/xen_kbd.c index 01c4283704..6aa4ca26db 100644 --- a/xen/drivers/char/xen_kbd.c +++ b/xen/drivers/char/xen_kbd.c @@ -218,7 +218,7 @@ static void keyboard_interrupt(int irq, void *dev_id, struct pt_regs *regs) if ( p != NULL ) { kbd_ring_push(status, scancode); - cpu_mask |= mark_guest_event(p, _EVENT_KBD); + cpu_mask |= mark_guest_event(p, _EVENT_PS2); } } diff --git a/xen/include/hypervisor-ifs/hypervisor-if.h b/xen/include/hypervisor-ifs/hypervisor-if.h index fd91a7d579..ab5ca7943a 100644 --- a/xen/include/hypervisor-ifs/hypervisor-if.h +++ b/xen/include/hypervisor-ifs/hypervisor-if.h @@ -72,22 +72,20 @@ */ /* Events that a guest OS may receive from the hypervisor. */ -#define EVENT_BLK_RESP 0x01 /* A block device response has been queued. */ +#define EVENT_BLKDEV 0x01 /* A block device response has been queued. */ #define EVENT_TIMER 0x02 /* A timeout has been updated. */ #define EVENT_DIE 0x04 /* OS is about to be killed. Clean up please! */ #define EVENT_DEBUG 0x08 /* Request guest to dump debug info (gross!) */ -#define EVENT_NET_TX 0x10 /* There are packets for transmission. */ -#define EVENT_NET_RX 0x20 /* There are empty buffers for receive. */ -#define EVENT_KBD 0x40 /* PS/2 keyboard or mouse event(s) */ +#define EVENT_NET 0x10 /* There are packets for transmission. */ +#define EVENT_PS2 0x20 /* PS/2 keyboard or mouse event(s) */ /* Bit offsets, as opposed to the above masks. */ -#define _EVENT_BLK_RESP 0 -#define _EVENT_TIMER 1 -#define _EVENT_DIE 2 -#define _EVENT_NET_TX 3 -#define _EVENT_NET_RX 4 -#define _EVENT_DEBUG 5 -#define _EVENT_KBD 6 +#define _EVENT_BLKDEV 0 +#define _EVENT_TIMER 1 +#define _EVENT_DIE 2 +#define _EVENT_DEBUG 3 +#define _EVENT_NET 4 +#define _EVENT_PS2 5 /* * Virtual addresses beyond this are not modifiable by guest OSes. diff --git a/xen/include/hypervisor-ifs/network.h b/xen/include/hypervisor-ifs/network.h index fe70c52eae..cd64f4fa73 100644 --- a/xen/include/hypervisor-ifs/network.h +++ b/xen/include/hypervisor-ifs/network.h @@ -69,9 +69,9 @@ typedef struct net_idx_st { /* * Guest OS places packets into ring at tx_req_prod. - * Guest OS receives DOMAIN_EVENT_NET_TX when tx_resp_prod passes tx_event. + * Guest OS receives EVENT_NET when tx_resp_prod passes tx_event. * Guest OS places empty buffers into ring at rx_req_prod. - * Guest OS receives DOMAIN_EVENT_NET_RX when rx_rssp_prod passes rx_event. + * Guest OS receives EVENT_NET when rx_rssp_prod passes rx_event. */ unsigned int tx_req_prod, tx_resp_prod, tx_event; unsigned int rx_req_prod, rx_resp_prod, rx_event; diff --git a/xen/net/dev.c b/xen/net/dev.c index 487d68ac5b..a0ba2c203e 100644 --- a/xen/net/dev.c +++ b/xen/net/dev.c @@ -2023,7 +2023,7 @@ static void make_tx_response(net_vif_t *vif, vif->tx_resp_prod = vif->shared_idxs->tx_resp_prod = pos; if ( pos == vif->shared_idxs->rx_event ) { - unsigned long cpu_mask = mark_guest_event(vif->domain, _EVENT_NET_TX); + unsigned long cpu_mask = mark_guest_event(vif->domain, _EVENT_NET); guest_event_notify(cpu_mask); } spin_unlock_irqrestore(&vif->tx_lock, flags); @@ -2052,7 +2052,7 @@ static void make_rx_response(net_vif_t *vif, vif->rx_resp_prod = vif->shared_idxs->rx_resp_prod = pos; if ( pos == vif->shared_idxs->rx_event ) { - unsigned long cpu_mask = mark_guest_event(vif->domain, _EVENT_NET_RX); + unsigned long cpu_mask = mark_guest_event(vif->domain, _EVENT_NET); guest_event_notify(cpu_mask); } spin_unlock_irqrestore(&vif->rx_lock, flags); diff --git a/xenolinux-2.4.21-sparse/arch/xeno/drivers/block/xl_block.c b/xenolinux-2.4.21-sparse/arch/xeno/drivers/block/xl_block.c index 42f229462a..743ecd9be0 100644 --- a/xenolinux-2.4.21-sparse/arch/xeno/drivers/block/xl_block.c +++ b/xenolinux-2.4.21-sparse/arch/xeno/drivers/block/xl_block.c @@ -11,7 +11,7 @@ typedef unsigned char byte; /* from linux/ide.h */ -#define XLBLK_RESPONSE_IRQ _EVENT_BLK_RESP +#define XLBLK_RESPONSE_IRQ _EVENT_BLKDEV #define DEBUG_IRQ _EVENT_DEBUG static blk_ring_t *blk_ring; @@ -573,7 +573,7 @@ int __init xlblk_init(void) blk_ring->req_prod = blk_ring->resp_prod = resp_cons = req_prod = 0; error = request_irq(XLBLK_RESPONSE_IRQ, xlblk_response_int, - SA_SAMPLE_RANDOM, "xlblk-response", NULL); + SA_SAMPLE_RANDOM, "blkdev", NULL); if ( error ) { printk(KERN_ALERT "Could not allocate receive interrupt\n"); diff --git a/xenolinux-2.4.21-sparse/arch/xeno/drivers/network/network.c b/xenolinux-2.4.21-sparse/arch/xeno/drivers/network/network.c index 4172166027..d14f08a8f1 100644 --- a/xenolinux-2.4.21-sparse/arch/xeno/drivers/network/network.c +++ b/xenolinux-2.4.21-sparse/arch/xeno/drivers/network/network.c @@ -25,8 +25,7 @@ #include #include -#define NET_TX_IRQ _EVENT_NET_TX -#define NET_RX_IRQ _EVENT_NET_RX +#define NET_IRQ _EVENT_NET #define TX_MAX_ENTRIES (TX_RING_SIZE - 2) #define RX_MAX_ENTRIES (RX_RING_SIZE - 2) @@ -38,8 +37,7 @@ #define RX_BUF_SIZE ((PAGE_SIZE/2)+1) /* Fool the slab allocator :-) */ -static void network_rx_int(int irq, void *dev_id, struct pt_regs *ptregs); -static void network_tx_int(int irq, void *dev_id, struct pt_regs *ptregs); +static void network_interrupt(int irq, void *dev_id, struct pt_regs *ptregs); static void network_tx_buf_gc(struct net_device *dev); static void network_alloc_rx_buffers(struct net_device *dev); static void network_free_rx_buffers(struct net_device *dev); @@ -128,27 +126,16 @@ static int network_open(struct net_device *dev) network_alloc_rx_buffers(dev); - error = request_irq(NET_RX_IRQ, network_rx_int, - SA_SAMPLE_RANDOM, "net-rx", dev); + error = request_irq(NET_IRQ, network_interrupt, + SA_SAMPLE_RANDOM, "network", dev); if ( error ) { - printk(KERN_WARNING "%s: Could not allocate receive interrupt\n", + printk(KERN_WARNING "%s: Could not allocate network interrupt\n", dev->name); network_free_rx_buffers(dev); goto fail; } - error = request_irq(NET_TX_IRQ, network_tx_int, - SA_SAMPLE_RANDOM, "net-tx", dev); - if ( error ) - { - printk(KERN_WARNING "%s: Could not allocate transmit interrupt\n", - dev->name); - free_irq(NET_RX_IRQ, dev); - network_free_rx_buffers(dev); - goto fail; - } - error = request_irq(_EVENT_DEBUG, dbg_network_int, SA_SHIRQ, "debug", dev); if ( error ) @@ -213,7 +200,8 @@ static void network_tx_buf_gc(struct net_device *dev) spin_unlock_irqrestore(&np->tx_lock, flags); } -inline pte_t *get_ppte(void *addr) + +static inline pte_t *get_ppte(void *addr) { pgd_t *pgd; pmd_t *pmd; pte_t *pte; pgd = pgd_offset_k( (unsigned long)addr); @@ -222,6 +210,7 @@ inline pte_t *get_ppte(void *addr) return pte; } + static void network_alloc_rx_buffers(struct net_device *dev) { unsigned int i, id; @@ -324,7 +313,7 @@ static int network_start_xmit(struct sk_buff *skb, struct net_device *dev) } -static void network_rx_int(int irq, void *dev_id, struct pt_regs *ptregs) +static void network_interrupt(int irq, void *dev_id, struct pt_regs *ptregs) { unsigned int i; struct net_device *dev = (struct net_device *)dev_id; @@ -332,6 +321,8 @@ static void network_rx_int(int irq, void *dev_id, struct pt_regs *ptregs) struct sk_buff *skb; rx_resp_entry_t *rx; + network_tx_buf_gc(dev); + again: for ( i = np->rx_resp_cons; i != np->net_idx->rx_resp_prod; @@ -390,13 +381,6 @@ static void network_rx_int(int irq, void *dev_id, struct pt_regs *ptregs) } -static void network_tx_int(int irq, void *dev_id, struct pt_regs *ptregs) -{ - struct net_device *dev = (struct net_device *)dev_id; - network_tx_buf_gc(dev); -} - - int network_close(struct net_device *dev) { netif_stop_queue(dev); @@ -408,8 +392,7 @@ int network_close(struct net_device *dev) * no sensible way of retrieving them. */ #if 0 - free_irq(NET_RX_IRQ, dev); - free_irq(NET_TX_IRQ, dev); + free_irq(NET_IRQ, dev); network_free_rx_buffers(dev); kfree(np->net_ring->rx_ring); diff --git a/xenolinux-2.4.21-sparse/include/asm-xeno/irq.h b/xenolinux-2.4.21-sparse/include/asm-xeno/irq.h index 4dbc7e6ed0..3a4a3e394f 100644 --- a/xenolinux-2.4.21-sparse/include/asm-xeno/irq.h +++ b/xenolinux-2.4.21-sparse/include/asm-xeno/irq.h @@ -14,11 +14,7 @@ #include #include -#define NET_TX_IRQ _EVENT_NET_TX -#define NET_RX_IRQ _EVENT_NET_RX -#define NET2_TX_IRQ _EVENT_NET2_TX -#define NET2_RX_IRQ _EVENT_NET2_RX -#define TIMER_IRQ _EVENT_TIMER +#define TIMER_IRQ _EVENT_TIMER #define NR_IRQS (sizeof(HYPERVISOR_shared_info->events) * 8) diff --git a/xenolinux-2.4.21-sparse/include/asm-xeno/keyboard.h b/xenolinux-2.4.21-sparse/include/asm-xeno/keyboard.h index edbd4e3f94..6d6461dfb9 100644 --- a/xenolinux-2.4.21-sparse/include/asm-xeno/keyboard.h +++ b/xenolinux-2.4.21-sparse/include/asm-xeno/keyboard.h @@ -19,12 +19,6 @@ #include #include - -#define KEYBOARD_IRQ _EVENT_KBD -#define AUX_IRQ _EVENT_KBD - -/* THIS SECTION RELATIVELY UNTOUCHED */ - extern int pckbd_setkeycode(unsigned int scancode, unsigned int keycode); extern int pckbd_getkeycode(unsigned int scancode); extern int pckbd_translate(unsigned char scancode, unsigned char *keycode, @@ -60,8 +54,10 @@ static inline int xen_kbd_controller_present () } /* resource allocation */ -#define kbd_request_region() do { } while (0) -#define kbd_request_irq(handler) request_irq(_EVENT_KBD, handler, 0, "PS/2 kbd", NULL) +#define kbd_request_region() \ + do { } while (0) +#define kbd_request_irq(handler) \ + request_irq(_EVENT_PS2, handler, 0, "ps/2", NULL) /* could implement these with command to xen to filter mouse stuff... */ #define aux_request_irq(hand, dev_id) 0 -- 2.30.2